《MNN For Swift》移动端机器学习实战课程发布!
自 2019 年 4 月在 Github 开源以来,淘系技术部-端智能团队自研的 MNN 推理引擎,因为其高性能、易用性以及优秀兼容性受到不少开发者的支持和喜爱。我们也把这份支持化作不断前进的动力,仅最近半年就推出了包括但不限于如下的诸多亮眼特性:
几何计算。通过 MNN 自研的“硬核”技术,将多后端算子实现这项枯燥但必要的工作成本大幅降低。正是基于这项技术,MNN 重写了目前所有的硬件后端。引入几何计算之后 GPU 后端算子的覆盖率大幅增加,在GPU 后端性能普遍获得约 20% 提升,并新支持了 TensorRT 和 CUDA 后端。
基于 Transformer 结构的 ASR 模型的支持。为了应对这类大量涉及 Control Flow、Dynamic Shape和Zero Shape等特性的模型结构,MNN 在框架层面进行了大幅度重构从而对其进行支持和完善。
关于 MNN 的强大,能说的还有很多,但我们不想再一次通过秀肌肉来证明 MNN 的领先独到。相反,我们希望通过这篇文章来说明更重要的一件事:来自开发者的声音,我们听见了。
在 MNN 开源的这一年多里,随着 MNN 被越来越多的开发者、企业所了解并使用,我们与社区之间的交流也愈加紧密频繁。在这之中,有一类的呼声经常被提起:
“MNN 很强了,就是希望 iOS / Android Demo 更多一点。Python 还是有点不熟悉”
“教教我们这些小白怎么上手呗。MNN 能干些啥呀~”
“五子棋牛逼,支持五神!老板我也想搞端智能!”
没错,很多人对机器学习的陌生来自于未知,而正是因为这个未知让大家想象不到能用 MNN 实现什么。
所以我们在想,如果用一门更熟悉的语言,带大家走入端智能的大门,为自己的职业生涯开辟一道新的口子,这样是不是对大家更有帮助?
今天,对着广大的移动开发者,我们要大声的宣布:MNN for Swift 正式来啦!伴随着这个项目一同发布的,还有系列实践性教程 -《MNN x Swift 机器学习实战》。
通过这两个项目,希望能给各位带来清晰的端智能学习路径。
能从课程中收获什么
相信大家都对网上质量参差不齐、没有实际干货的课程感到深恶痛绝。所以在设计系列教程的时候,我们首要考虑的两个要素就是:
免费
硬核技术和动手实践结合
基于此,我们会以每两周一次的方式进行 5 次的系列课程教学,结合 MNN 工作台 AI For Everyone 的低实践门槛,带来值得期待的知识分享。
✿ 系列直播预告
插段广告,如果你还不知道 MNN 工作台是什么,那就赶快前往 MNN 官网 www.mnn.zone 去下载吧。MNN 工作台是淘系技术部 - 端智能团队在今年 10 月份对外公测的一站式端侧 AI 平台。它是集低门槛预训练模版、开箱即用算法集、多端一键部署于一体的机器学习工具箱,通过 MNN 工作台,每个人都可以在几分钟内完成模型训练并部署到手机上运行看到应用效果。
整体的课程大纲如下:
Introduce to MNN For Swift
介绍移动端机器学习现状
MNN For Swift 整体概览
MNN For Swift 实现原理
C++ 至 C 到 Swift 开发流程的最佳实践
MNN For Swift API 设计思路
MNN For Swift 进阶 - 玩转 Swift 自定义操作符
玩转 MNN 工作台 For Swit (一)- 模型预测
MNN For Swift 推理 API 使用介绍
手把手玩转 MNIST 手写数字预测
高级进阶 - 从 MNN 工作台获取更多高级模型
玩转 MNN 工作台 For Swift(二)- 模型训练
MNN For Swift 训练 API 使用介绍
用 MNN Swift 构建 MINST 数字识别模型
高级进阶 - 通过 MNN 工作台训练更多模型
MNN For Swift 应用实战
OCR - 光学字符识别简介
MNN 工作台 OCR 开箱即用模型简介
使用 MNN For Swift 部署 OCR 模型
完整应用案例展示
怎么样?看完大纲后是不是对使用 MNN For Swift 进行机器学习充满了好奇?那就敬请期待我们后续的课程吧!
当然有人会问:“付出那么多,你们想从这个课程中收获什么?”
很简单,我们希望通过这个课程让大家了解端智能是什么、如何把端智能和自身的日常工作进行结合。对那些积极参与《MNN x Swift》系列课程的朋友,如果您对 MNN 和 Swift 有什么独到的见解或者建议,也会邀请您参与到我们的直播中,共同打造 MNN For Swift 的社区生态!
只有更多人一起来玩端智能,这个新兴的领域才能受到更多的关注、获得更长足的发展。
Why Swift
最后我们还想来谈谈为什么 MNN 会选择在这个时间点支持 Swift。
一直以来,因为其强大的社区活力和易用的特性,Python 始终把控着机器学习社区语言的头把交椅(虽然 Julia 也发展的很迅猛)。Tensorflow、PyTorch 以及最新推出的 MNN 工作台等主流的机器学习框架或工具更是和 Python 这门语言紧紧的交织在一起。
但是将 Python 搬到移动端上却不是一件非常容易的事,引用 Tensorflow 对于移动端应用 Python 的观点来看:
部署麻烦,运行时依赖太多。
没有编译期类型检查。这导致很多错误要到运行时才能发现,在移动端,这些不可忽视的错误常常导致严重的应用崩溃等重大用户体验问题。
性能太差,并发困难。而机器学习模型对算力的贪婪需求,迫切需要靠并发缓解。
而自 2014 年 WWDC 正式发布之后,Swift 已经逐渐成为了苹果开发者生态中的主流开发语言。作为一门比 Objective-C 更加现代化、更加安全的编程语言,Swift 已经获得了国内外广大开发者的喜爱。同时,应用 Swift 可以让我们“免费”享受到苹果工程师持续不断的性能、稳定性优化成果。
更重要的一点是,当我们基于 Swift 实践了部分机器学习开发工作后,我们惊讶的发现,Swift 竟然在机器学习领域有着与 Python 相媲美的表达特性。
用如下一段 Python 和 Swift 的 MNN 编程片段进行简单对比:
Python 代码:
# F = MNN.expr
input_data = F.placeholder([1, 3, image_height, image_width], F.NCHW, F.float)
input_data.write(image_data)
input_data = F.convert(input_data, F.NC4HW4)
outputs = ocr_det_net.forward([input_data])[0]
outputs = F.convert(outputs, F.NCHW)
data = outputs.read()
同样的代码在 Swift 中:
var input_data = Expr.placeholder(shape: [1, 3, image_height, image_width],
dataFormat: .NCHW,
dtype: Float.self)
input_data.write(data: image_data)
input_data = Expr.convert(input: input_data, format: .NC4HW4)
var output = ocr_det_net.onForward(inputs: [input_data])[0]
output = Expr.convert(input: output, format: .NCHW)
let data = output.read()
毫不夸张的说,如果不加以提示,可能根本不会感受到二者的异同,可见二者在语法表达上十分接近。
除了同样充分的表达性以外,Swift 在移动开发领域天然的优势(苹果大力支持)以及语言自身的安全特性都让 Swift 比起 Python 而言更适合移动端机器学习。
这也是我们为什么下定决心要开展 MNN For Swift 的重要原因。
在内部项目中,我们已经用 MNN For Swift 与 SwiftUI 完成了机器学习应用的编写,91% 的代码均为 Swift。由此可见 Swift 在移动端机器学习领域是能让开发者快速上手,降低开发者的开发门槛的一门优秀语言。所以不要犹豫,赶紧把 MNN For Swift 学起来。
结语
纸上得来终觉浅,绝知此事要躬行。不要再为自己每天还在糊 UI、画 Label 、组装 TableView 而感到焦虑。通过《MNN x Swift 机器学习实战》,我们希望让大家感受到深度学习不止是从事算法专业人员的“独门武器”、也不是大厂宣传秀肌肉的利器,而是让所有爱好技术的人都能参与实践的自我提升手段。
也希望借助 MNN For Swift 项目及系列课程,让大家感受到 MNN 积极拥抱社区、响应开发者呼声的热情与决心,给开发者们缓解一丝冬季的焦虑。
✿ 拓展阅读
作者|明弈、星志
编辑|橙子君
出品|阿里巴巴新零售淘系技术